package com.benshou.bcss.common.lambda;

import com.benshou.bcss.common.j17common.annotation.Nullable;

import java.lang.invoke.SerializedLambda;

/**
 * Lambda 元数据
 *
 * @author <a href="mailto:liuzhenbang@benshou.com">Liu Zhenbang</a>
 */
public interface LambdaMetadata {

    /**
     * 获取实现方法名
     * <p>
     *     例如： Object::toString 。则 implMethodName = toString
     * </p>
     *
     * @return 实现方法名
     * @see SerializedLambda#getImplMethodName()
     */
    String getImplMethodName();

    /**
     * 方法如果为 Getter/Setter/Is 的 JavaBean 规范命名，返回对应的字段名。否则返回 null 。
     * <p>
     *     例如：
     *     ""        ->      null
     *     g         ->      null
     *     ge        ->      null
     *     get       ->      null
     *     set       ->      null
     *     is        ->      null
     *     geta      ->      null
     *     setb      ->      null
     *     getAtr    ->      atr
     *     setBul    ->      bul
     *     get1a     ->      1a
     *     getField  ->      field
     * </p>
     *
     * @return 对应的字段名（如果为普通方法，或者非 JavaBean 规范命名的方法，返回 null ）
     */
    @Nullable
    String fieldNameOfJavaBean();
}
